今天寫 Greedy的題目 ,雖說是 medium 但蠻簡單的。
881. Boats to Save People (medium)
題目說明:
給你一個陣列 people,其中 people[i] 是第 i 個人的重量,以及無限數量的船,其中每艘船可以承載的最大重量為 limit。每艘船最多同時載運兩人,前提是這些人的重量總和不得超過限制。返回載完所有人的最少船隻數量。
想法:
每次儘量用一艘船載兩個人,並選擇剩餘中最重與最輕的人搭配,確保每次都將最重的人儘快送走,如果無法匹配到最兩個人,那就代表重的人太重,要再挑次重的人做匹配,而那位重的人,自己坐一艘船。
class Solution {
public:
int numRescueBoats(vector<int>& people, int limit) {
int ctrBoats = 0;
int l = 0, r = people.size()-1;
sort(people.begin(), people.end());
while (l <= r) {
if (people[l] + people[r] <= limit) {
l++;
}
r--;
ctrBoats += 1;
}
return ctrBoats;
}
};
時間複雜度: O(NLogN)